﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using CamadaDeDados;
using CamadaDeNegocios.Models;

using MySql.Data.MySqlClient;
using System.Data;


namespace CamadaDeNegocios.Controllers
{
    public class PessoaJuridicaController
    {
        /// <summary>
        /// Método para inserir uma nova Pessoa Juridica
        /// </summary>
        /// <param name="pPessoa">Dados da pessoa a ser inserida</param>
        /// <returns>Retorna verdadeiro se o processo for efetuado com sucesso</returns>
        public static bool Inserir(PessoaJuridica pPessoa)
        {
            Conexao _conexao = new Conexao("pessoa_juridica");
            try
            {

                _conexao.AdicionarParametro("RazaoSocial", pPessoa.RazaoSocial);
                _conexao.AdicionarParametro("NomeFantasia", pPessoa.NomeFantasia);
                _conexao.AdicionarParametro("CNPJ", pPessoa.CNPJ);
                _conexao.AdicionarParametro("Inscricao", pPessoa.Inscricao);
                _conexao.AdicionarParametro("Telefone", pPessoa.Telefone);
                _conexao.AdicionarParametro("Celular", pPessoa.Celular);
                _conexao.AdicionarParametro("HomePage", pPessoa.HomePage);
                _conexao.AdicionarParametro("Email", pPessoa.Email);
                _conexao.AdicionarParametro("Situacao", pPessoa.Situacao.ToString());

                _conexao.IniciarTransacao();

                _conexao.ExecutarComando(ComandosBanco.Insere);

                _conexao.Commit();
                return true;
            }
            catch (Exception ex)
            {
                _conexao.RollBack();
                
                throw ex;
            }
        }

        /// <summary>
        /// Método para alterar os dados da Pessoa Juridica
        /// </summary>
        /// <param name="pPessoa">Dados da pessoa que será atualizada</param>
        /// <returns>Retorna verdadeiro se o processo for efetuado com sucesso</returns>
        public static bool Alterar(PessoaJuridica pPessoa)
        {
            Conexao _conexao = new Conexao("pessoa_juridica");
            try
            {
                _conexao.AdicionarParametro("IdPessoa", pPessoa.IdPessoa);
                _conexao.AdicionarParametro("RazaoSocial", pPessoa.RazaoSocial);
                _conexao.AdicionarParametro("NomeFantasia", pPessoa.NomeFantasia);
                _conexao.AdicionarParametro("CNPJ", pPessoa.CNPJ);
                _conexao.AdicionarParametro("Inscricao", pPessoa.Inscricao);
                _conexao.AdicionarParametro("Telefone", pPessoa.Telefone);
                _conexao.AdicionarParametro("Celular", pPessoa.Celular);
                _conexao.AdicionarParametro("HomePage", pPessoa.HomePage);
                _conexao.AdicionarParametro("Email", pPessoa.Email);
                _conexao.AdicionarParametro("Situacao", pPessoa.Situacao.ToString());

                _conexao.IniciarTransacao();

                _conexao.ExecutarComando(ComandosBanco.Altera);

                _conexao.Commit();

                return true;
            }
            catch (Exception ex)
            {
                _conexao.RollBack();

                throw ex;
            }
        }

        /// <summary>
        /// Busca de pessoa Juridica pelo código
        /// </summary>
        /// <param name="IdPessoa">Código da pessoa a ser pesquisada</param>
        /// <returns>Pessoa Juridica encontrada</returns>
        public static PessoaJuridica BuscarPorId(int IdPessoa)
        {
            Conexao _conexao = new Conexao("pessoa_juridica");
            _conexao.AdicionarParametro("IdPessoa", IdPessoa);

            try
            {
                DataTable _leitor = _conexao.RetornarDataTable(ComandosBanco.BuscaPorID);
                //MySqlDataReader _leitor = _conexao.RetornarDataReader(ComandosBanco.BuscaPorID);

                if (_leitor.Rows.Count > 0)
                {
                    PessoaJuridica _pessoa = new PessoaJuridica(_leitor.Rows[0]);
                    return _pessoa;
                }
                else
                {
                    throw new Exception("Pessoa não encontrada!");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Lista de pessoas juridicas
        /// </summary>
        /// <returns></returns>
        public static List<PessoaJuridica> Lista()
        {
            Conexao _conexao = new Conexao("pessoa_juridica");

            MySqlDataReader _leitor = _conexao.RetornarDataReader(ComandosBanco.Lista);

            List<PessoaJuridica> _listaPessoas = new List<PessoaJuridica>();

            while (_leitor.Read())
            {
                _listaPessoas.Add(new PessoaJuridica(_leitor));
            }

            return _listaPessoas;
        }
    }
}
